Yocto ProjectBuildroot가 할 수 있는 툴체인, 부트로더, 커널, 루트 파일 시스템을 빌드할 수 있으며,
런타임에 설치될 수 있는 바이너리 패키지와 전체 리눅스 배포를 생성할 수 있다.
Yocto Project는 레시피(buildroot의 패키지)로 구성한 것을 만드는 BitBake와 테스크 스케줄러, 파이썬, 셸 스크립트로 구동
- OE-Core: OpenEmbedded와 공유하는 코어 메타 데이터
- BitBake: OpenEmbedded 및 기타 프로젝트와 공유하는 태스크 스케쥴러
- Poky: 레퍼런스 배포판
- Documentation: 사용자 설명서와 각 컴포넌트에 대한 개발자 지침
- Toaster: BitBake와 그 메타데이터를 위한 웹 기반 인터페이스
- ADT Eclispe: 이클립스 플러그인
git clone -b kirkstone git://git.yoctoproject.org/poky.git
config
cd poky
source oe-init-build-env
중간 생성 파일, 타깃 이미지 파일은 모두 poky/build/에 저장
(oe-init-build-env에 매개변수로 원하는 디렉토리 전달 가능)
┌──(csian㉿csian)-[~/poky/build/conf]
└─$ ls -al
total 28
drwxr-xr-x 2 csian csian 4096 Mar 2 20:15 .
drwxr-xr-x 3 csian csian 4096 Mar 2 20:15 ..
-rw-r--r-- 1 csian csian 283 Mar 2 20:15 bblayers.conf
-rw-r--r-- 1 csian csian 11885 Mar 2 20:15 local.conf
-rw-r--r-- 1 csian csian 15 Mar 2 20:15 templateconf.cfg
local.conf: 빌드하려고 하는 장치의 스펙과 빌드환경 설정
bblayers.conf: 사용하는 메타 레이어의 패스
templateconf.cfg: 다양한 conf 파일을 포함하는 디렉토리 이름을 저장(default: meta-poky/conf)
Build빌드하기 위해 루트 파일 시스템 이미지를 알려주면서 BitBake를 실행
- core-image-minimal: 작은 콘솔 기반 시스템
- core-image-minimal-initramfs: core-image-minimal과 비슷하나 램 디스크로 빌드
- core-image-x11: X11 서버와 x터미널 앱을 통한 그래픽 지원용 기본 이미지
- core-image-sato: Sato 기반의 풀 그래픽 시스템(X11+GNOME에 빌드된 모바일 그래픽 환경)
sato 이미지는 터미널, 에디터, 파일 관리자를 포함한 다양한 앱 포함
ex) core-image-minimal
└─$ which bitbake
/home/csian/poky/bitbake/bin/bitbake
bitbake core-image-minimal
poky/build/downloads : 내려 받는 소스 코드(~4GiB)
/tmp : 대부분의 빌드 결과물 저장
/work : 빌드 디렉토리와 루트 파일시스템을 위한 스테이징 영역 포함
/deploy : 타깃 배포를 위한 최종 바이너리 포함
/images/[machine_name] : 타깃에 실행되기 위해 준비된 부트로더 커널과 루트 파일시스템 이미지를 포함
/rpm : 이미지를 구성했던 RPM 패키지 포함
/licenses : 각 패키지에서 추출된 라이선스 파일들 포함
LayerYocto Project의 메타 데이터는 레이어로 구성되어 있다.(meta*)
필요한 레이어를 적절한 위치(meta* 디렉토리)에 저장하고, /build/conf/bblayers.conf에 추가
┌──(csian㉿csian)-[~/poky/build/conf]
└─$ cat bblayers.conf
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
/home/csian/poky/meta \
/home/csian/poky/meta-poky \
/home/csian/poky/meta-yocto-bsp \
"
각 레이어는 최소 하나의 구성 파일 conf/layers.conf, README, 라이선스등을 포함해야 함
cd ~/poky
scripts/yocto-layer create <meta name>
Process Examples
cd ~/poky
source oe-init-build-env build-nova
bitbake-layers add-layer ../meta-nova
bitbake-layers show-layers
Recipe & Bitbake- Recipes(*.bb): 소스코드의 사본과 다른 컴포넌트와의 의존관계, 빌드 및 설치 방법을 포함한 소프트웨어 유닛의 빌드 정보
- Append(*.bbappend): 레시피의 세부 내용을 덮어씌우거나 확장하게 해줌(일반적으로 *.bb 뒤에 첨가되는 명령)
- Include(*.inc): 정보가 레시피들 사이에서 공유될 수 있도록 함(include or require 키워드로 포함)
- Classes(*.bbclass): 공통 빌드 정보를 포함(inherit 키워드를 이용해 레시피와 다른 클래스로 상속되며 확장)
(classes/base.bbclase 클래스는 묵시적으로 모든 레시피에 상속된다.)
- Configuration(*.conf): 프로젝트의 빌드 프로세스를 통제하는 다양한 구성 변수를 정의
bitbake -c <태스크> <레시피>
bitbake -c listtasks core-image-minimal
bitbake -c fetch busybox
bitbake -c fetchall core-image-minimal
태스크
do_fetch, do_unpack, do_patch, do_configure, do_compile, do_install, do_listtasks 등
(do는 빼고 -c 옵션으로 실행)
ex) helloworld 레시피 생성
meta-nova/recipes-local/helloword
files
helloworld.c
helloworld_1.0.bb ; <패키지 이름>_version.bb
helloworld_1.0.bb
DESCRIPTION="A freindly program that prints Hello World!"
PRIORITY="optional"
SECTION="examples"
LICENSE="GPLv2"
LIC_FILES_CHKSUM="file://${COMMON_LICENSE_DIR}/GPL2.0;
md5=801f80980d171dd6425610833a22dbe6"
SRC_URI="file://helloworld.c"
S="${WORKDIR}"
do_compile(){
${CC} ${CFLAGS} ${LDFLAGS} helloworld.c -o helloworld
}
do_install(){
install -d ${D}${bindir}
install -m 0755 helloworld ${D}${bindir}
}
build
make SDK
bitbake -c populate_sdk <image>
tmp/deploy/sdk 안에 자체 설치(Self installing) 셸 스크립트를 생성한다.
poky-<c_library>-<host_machine>-<target_image><target_machine>-toolchain-<version>.sh